• 9077阅读
  • 16回复

[讨论]问个Qwidget显示问题,代码很简单~! [复制链接]

上一主题 下一主题
离线b05071262
 

只看楼主 倒序阅读 楼主  发表于: 2010-12-31


我把代码图片贴出来


上面的程序,只要将Desk构造函数19行的32改成320是可以显示我想要的效果的,,


不过我要在Widget类中添加私有曹 ,只要我一添加Q_OBJECT这个申明,就只能显示一个Qtoolbutton,

而不显示Widget了,下面图片都是我在类Widget添加Q_OBJECT效果图,我现在是既想要私有曹也想要显示整11楼贴出
的效果

有没高手解决下这个问题,,还是这个是QT bug ,还是需要设置什么东西   我用的QT是4.5.3版本
[ 此帖被b05071262在2011-01-04 11:46重新编辑 ]
离线b05071262

只看该作者 1楼 发表于: 2010-12-31
我在贴一张 Widget单独显示的图片,,,main 函数我就不贴了,反正都是四句。。
离线b05071262

只看该作者 2楼 发表于: 2010-12-31
忘记把 构造函数 中 第10行代码 注释掉。。。
离线biggerdog
只看该作者 3楼 发表于: 2010-12-31
widget->setGeometry(QRect(0,220,32,22));
你的32太小了 改成320 或者你想要的大小试试?
离线b05071262

只看该作者 4楼 发表于: 2010-12-31
回 3楼(biggerdog) 的帖子
试了一下 还是不行啊。。。。粗心忘记打0了  呵呵
只看该作者 5楼 发表于: 2010-12-31
widget的背景颜色是继承父部件的.

只看该作者 6楼 发表于: 2010-12-31
你在desk里创建了 widget后,show他
试试.
或者给desk一个布局,把这个widget放到布局上试试
离线biggerdog
只看该作者 7楼 发表于: 2010-12-31
把你的代码重新输入, 编译运行后没问题。

main.cpp:

#include "desk.h"

#include <QApplication>

int main(int argv, char* args[])
{
    QApplication app(argv, args);

    Desk desk;
    desk.show();

    return app.exec();
}


desk.h:

#ifndef DESK_H
#define DESK_H

#include <QWidget>
#include <QDialog>

class QToolButton;
class Widget : public QWidget
{
public:
  Widget(QWidget *parent=0);
private:
   QToolButton *startButton;
};

class Desk : public QDialog
{
public:
   Desk(QWidget *parent=0);
private:
   Widget *widget;
};

#endif



desk.cpp:

#include <QtGui>
#include "desk.h"

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
    setStyleSheet("background-color:rgb(0,255,110);");
    startButton = new QToolButton(this);
    startButton->setGeometry(0,0,30,20);
}

Desk::Desk(QWidget *parent)
: QDialog(parent)
{
    resize(320,240);
    widget = new Widget(this);
    widget->setVisible(true);
    widget->setGeometry(QRect(0,220,320,22));
}
离线biggerdog
只看该作者 8楼 发表于: 2010-12-31
对了 你是想Widget充满整个Desk,还只是希望Widget能够显示? 这里只是显示在最下边一条 而不是整个Desk里都是Widget啊
离线b05071262

只看该作者 9楼 发表于: 2010-12-31
回 6楼(算了不说了) 的帖子
我已经布局了啊 ,,是手动定义而已,没用QLayout而已
离线b05071262

只看该作者 10楼 发表于: 2010-12-31
回 8楼(biggerdog) 的帖子
我是想显示一小条,,东西,
离线biggerdog
只看该作者 11楼 发表于: 2010-12-31
那代码应该没问题,我编译运行的结果

 

离线b05071262

只看该作者 12楼 发表于: 2011-01-04
回 11楼(biggerdog) 的帖子
我知道什么问题了,,我的原本程序里面widget类是有加信号的,,如果你在widget类中加句Q_OBJECT 就不能显示整条,只能显示一个按钮。。。我一定要用信号和曹的,现在不能加Q_OBJECT郁闷。。



论坛改版,我一进来就出错,换个浏览⑦才可以进,真是郁闷。。
离线biggerdog
只看该作者 13楼 发表于: 2011-01-04
确实如你所说的 加上Q_OBJECT就不能了

不过QWidget本身就继承了QObject啊 应该可以直接使用信号槽的

可能的话 需求或代码再详细点
离线b05071262

只看该作者 14楼 发表于: 2011-01-04
回 13楼(biggerdog) 的帖子
是QT自带的信号 和曹是可以不用申明Q_OBJECT的,,

如果要实现私有曹,就一定要加Q_OBJECT, 不加的话QT会不认识的。。
离线biggerdog
只看该作者 15楼 发表于: 2011-01-04
给你一个替代方案吧 就是不用setStyleSheet 而是用setPalette 望对你有用。

desk.h:

#ifndef DESK_H
#define DESK_H

#include <QWidget>
#include <QDialog>
#include <QObject>

class QToolButton;

class Widget : public QWidget
{
    Q_OBJECT
public:
  Widget(QWidget *parent=0);
private:
   QToolButton *startButton;
};

class Desk : public QDialog
{
public:
   Desk(QWidget *parent=0);
private:
   Widget *widget;
};

#endif


desk.cpp:

#include <QtGui>
#include "desk.h"

Widget::Widget(QWidget *parent)
: QWidget(parent)
{
    startButton = new QToolButton(this);
    startButton->setGeometry(0,0,30,20);
}

Desk::Desk(QWidget *parent)
: QDialog(parent)
{
    QPalette palette;
    palette.setColor(QPalette::Window, QColor(0, 170, 0, 255));

    Widget* widget = new Widget(this);
    widget->setPalette(palette);
    widget->setAutoFillBackground(true);

    widget->setGeometry(QRect(0,220,320,22));
}

main.cpp:

#include "desk.h"

#include <QApplication>

int main(int argv, char* args[])
{
    QApplication app(argv, args);

    Desk desk;
    desk.resize(320,240);
    desk.show();

    return app.exec();
}
离线b05071262

只看该作者 16楼 发表于: 2011-01-04
回 15楼(biggerdog) 的帖子
看来是 setStyleSheet  这个函数和Q_OBJECT有冲突了。。。调色板挺好用的,感谢你的热心帮忙。。。


大大狗,,呵呵
快速回复
限100 字节
 
上一个 下一个