请问一下我在Qt一应用程序中,在构造函数里面写的widget比如按钮这些,运行后都无法显示,只有一空白窗体
我很郁闷的是有时一些程序会正常显示出来有时却不行,这些程序还是按照教材中的例子打的,唉,先谢谢了...
我很郁闷的是有时一些程序会正常显示出来有时却不行,这些程序还是按照教材中的例子打的,唉,先谢谢了
展开
2个回答
展开全部
如果说你的按钮没有显示,最有可能的原因是你没有将按钮的父窗口设置成你自定义的Widget
比如说你自定义了一个 Widget,它继承自 QWidget,示意如下:
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QPushButton buttonA;
QPushButton buttonB;
QPushButton* pButton;
};
#endif // WIDGET_H
在上面的头文件中定义了两个button以及一个指针,下面是源文件
//widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
buttonA.setText("buttonA");
buttonB.setText("buttonB");
//在构造pButton时指定Widget为pButton的父窗口
//注意:由于pButton继承自QObject并且你为他指定了父窗口,
//父类中的QObjetc会对pButton的内存进行管理,并在合适的时候释放内存,
//所以你不需要在Widget的析构函数中去进行delete pButton的操作,
//建议使用new这种方式来构造子控件
pButton = new QPushButton(this);
pButton->setText("buttonC");
//指定Widget为buttonA和buttonB的父窗口
//如果你不指定他们的父窗口,那么这些控件将不可见
//你可以注释下两行中的某条语句,来测试控件是否可见
//目前两个控件都是可见的
buttonA.setParent(this);
buttonB.setParent(this);
//移动控件到相应的坐标点
buttonA.move(100,100);
buttonB.move(100,150);
pButton->move(100,200);
}
Widget::~Widget()
{
}
//main.cpp
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
这就是整个示例程序了,总的来说,要想窗体中的控件可见,你必须将该窗体设置成这些控件的父窗口。
比如说你自定义了一个 Widget,它继承自 QWidget,示意如下:
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
private:
QPushButton buttonA;
QPushButton buttonB;
QPushButton* pButton;
};
#endif // WIDGET_H
在上面的头文件中定义了两个button以及一个指针,下面是源文件
//widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
buttonA.setText("buttonA");
buttonB.setText("buttonB");
//在构造pButton时指定Widget为pButton的父窗口
//注意:由于pButton继承自QObject并且你为他指定了父窗口,
//父类中的QObjetc会对pButton的内存进行管理,并在合适的时候释放内存,
//所以你不需要在Widget的析构函数中去进行delete pButton的操作,
//建议使用new这种方式来构造子控件
pButton = new QPushButton(this);
pButton->setText("buttonC");
//指定Widget为buttonA和buttonB的父窗口
//如果你不指定他们的父窗口,那么这些控件将不可见
//你可以注释下两行中的某条语句,来测试控件是否可见
//目前两个控件都是可见的
buttonA.setParent(this);
buttonB.setParent(this);
//移动控件到相应的坐标点
buttonA.move(100,100);
buttonB.move(100,150);
pButton->move(100,200);
}
Widget::~Widget()
{
}
//main.cpp
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
这就是整个示例程序了,总的来说,要想窗体中的控件可见,你必须将该窗体设置成这些控件的父窗口。
展开全部
楼上你这样的方法对于QT编程是多余的。这是在MFC里面才用的方法。
//移动控件到相应的坐标点
buttonA.move(100,100);
buttonB.move(100,150);
pButton->move(100,200);
QT有他自己的布局管理器。你可以不用在意他的坐标,但他可以帮你显示出最好的位置。
比如我接楼上的例子。虽然楼上让按钮显示出来了。但是楼主你其实没有把你的按钮添加到一个布局里去。这样你也可以不用指定父对象,QT会自动生成父子关系!
QVBoxLayout* mainLayout=new QVBoxLayout;\\创建一个竖排的布局
mainLayout->addWidget(&buttonA);
mainLayout->addWidget(&buttonB);
mainLayout->addWidget(pbutton);
setLayout(mainLayout);
这样就可见了
//移动控件到相应的坐标点
buttonA.move(100,100);
buttonB.move(100,150);
pButton->move(100,200);
QT有他自己的布局管理器。你可以不用在意他的坐标,但他可以帮你显示出最好的位置。
比如我接楼上的例子。虽然楼上让按钮显示出来了。但是楼主你其实没有把你的按钮添加到一个布局里去。这样你也可以不用指定父对象,QT会自动生成父子关系!
QVBoxLayout* mainLayout=new QVBoxLayout;\\创建一个竖排的布局
mainLayout->addWidget(&buttonA);
mainLayout->addWidget(&buttonB);
mainLayout->addWidget(pbutton);
setLayout(mainLayout);
这样就可见了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询