省流可以直接拖到最后
主函数
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;//新建一个widget
w.show();//显示widget
return a.exec();//等待退出
}
新建w时将调用Widget类的构造函数
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
我们来逐字逐句的看这个函数做了什么
ui(new Ui::Widget)
ui在Widget变量中
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }//一个名称为Ui命名空间,里面有一个叫Widget的类
QT_END_NAMESPACE
class Widget : public QWidget//又一个叫Widget的类,但是没有属于命名空间,所以现在有两个类
//Widget和Ui::Widget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
//因为是Ui命名空间里的Widget一个指针,所以才需要在初始化Widget的时候调用new Ui::Widget获取内存空间
};
那么调用new时*ui的那个Widget类的构造函数也会执行
namespace Ui {
class Widget: public Ui_Widget {};//完全继承Ui_Widget类
} // namespace Ui
再看看Ui_Widget类
class Ui_Widget
{
public:
//一些指针
QWidget *horizontalLayoutWidget;
QHBoxLayout *horizontalLayout;
QPushButton *pushButton_2;
QPushButton *pushButton;
//至少Ui_Widget类使用自动生成的构造函数
void setupUi(QWidget *Widget)//setUi时将各种指针挂载在输入的QWidget对象树上
{
//我在ui文件里设置了一些选项,不用在意
if (Widget->objectName().isEmpty())
Widget->setObjectName(QString::fromUtf8("Widget"));
Widget->resize(800, 600);
horizontalLayoutWidget = new QWidget(Widget);//绑定父类
horizontalLayoutWidget->setObjectName(QString::fromUtf8("horizontalLayoutWidget"));
horizontalLayoutWidget->setGeometry(QRect(120, 80, 521, 91));
horizontalLayout = new QHBoxLayout(horizontalLayoutWidget);//绑定父类
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
horizontalLayout->setContentsMargins(0, 0, 0, 0);
pushButton_2 = new QPushButton(horizontalLayoutWidget);//绑定父类
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
horizontalLayout->addWidget(pushButton_2);
pushButton = new QPushButton(horizontalLayoutWidget);//绑定父类
pushButton->setObjectName(QString::fromUtf8("pushButton"));
horizontalLayout->addWidget(pushButton);
horizontalLayout->setStretch(0, 1);
horizontalLayout->setStretch(1, 2);
retranslateUi(Widget);
QMetaObject::connectSlotsByName(Widget);
} // setupUi
void retranslateUi(QWidget *Widget)
{
Widget->setWindowTitle(QApplication::translate("Widget", "Widget", nullptr));
pushButton_2->setText(QApplication::translate("Widget", "PushButton", nullptr));
pushButton->setText(QApplication::translate("Widget", "PushButton", nullptr));
} // retranslateUi
};
例:访问对应控件的方法
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setStyleSheet("QPushButton{background-color:red}");
//修改pushButton的背景颜色
}