初识Qt的小问题,往大大路过指教
小弟自己想了一个小例子,思路如下
1. 一个对话框,包括两个按钮和一个布局;
2. 一个按钮A最初为setEnabled(false),需要在点击另一个按钮B后,A才可用。
代码如下(为方便,将声明和定义卸载一个.cpp文件中的)
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QDialog>
//定义新的QDialog类
class cDialog:public QDialog{
//Q_OBJECT
//经实践证明不用在声明时加Q_OBJECT,加了之后翻到编译报错undefined reference to 'vtable for ******'
public:
cDialog(QWidget* parent = 0);
signals:
void activateButtonClicked();
private:
QPushButton* activateButton;
QPushButton* quitButton;
QVBoxLayout* layout;
public slots:
void buttonActivated();
};
//新cDialog定义完毕
//
//
cDialog::cDialog(QWidget *parent):QDialog(parent){
activateButton=new QPushButton("Activate");
quitButton=new QPushButton("Quit");
quitButton->setEnabled(false);
layout=new QVBoxLayout;
layout->addWidget(activateButton);
layout->addWidget(quitButton);
setLayout(layout);
connect(activateButton,SIGNAL(clicked()),this,SLOT(buttonActivated()));
connect(quitButton,SIGNAL(clicked()),this,SLOT(close()));
}
//
void cDialog::buttonActivated(){
quitButton->setEnabled(true);
}
//
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
cDialog* firstDialog=new cDialog;
firstDialog->show();
return a.exec();
}
#ifndef CDIALOG_H
#define CDIALOG_H
#include <QDialog>
#include <QtGui>
#include <QVBoxLayout>
class cDialog : public QDialog
{
Q_OBJECT
public:
cDialog(QWidget *parent = 0);
~cDialog();
private:
QPushButton *activateBtn;
QPushButton *quitBtn;
QVBoxLayout *layout;
public slots:
void activate();
};
#endif // CDIALOG_H
#include "cdialog.h"
cDialog::cDialog(QWidget *parent)
: QDialog(parent)
{
activateBtn = new QPushButton("activate");
quitBtn = new QPushButton("quit");
layout = new QVBoxLayout;
quitBtn->setEnabled(false);
layout->addWidget(activateBtn);
layout->addWidget(quitBtn);
setLayout(layout);
connect(activateBtn,SIGNAL(clicked()),this,SLOT(activate()));
connect(quitBtn,SIGNAL(clicked()),this,SLOT(reject()));
}
void cDialog::activate()
{
quitBtn->setEnabled(true);
}
cDialog::~cDialog()
{
}
#include "cdialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
cDialog w;
w.show();
return a.exec();
}