Chinaunix
标题:
请大家帮忙看看这段程序,感觉没有错误,可就是编不过去![qt]
[打印本页]
作者:
cyberHunK
时间:
2007-12-03 14:19
标题:
请大家帮忙看看这段程序,感觉没有错误,可就是编不过去![qt]
#include <qapplication.h>
#include <qwidget.h>
#include <qlistview.h>
#include <qmessagebox.h>
class MyMainWindow : public QWidget
{
Q_OBJECT
public:
MyMainWindow();
private:
QListView *pListView;
QListViewItem *pItem;
QListViewItem *pTopic1;
QListViewItem *pTopic2;
QListViewItem *pTopic3;
QMessageBox *pBox;
public slots:
void ShowDescription();
};
void MyMainWindow::ShowDescription()
{
pBox = new QMessageBox("Book Info",
"Here, we could show some short information",
QMessageBox::Information,
QMessageBox::Ok,
0,
0);
pBox->show();
}
MyMainWindow::MyMainWindow()
{
setGeometry(150, 150, 800, 600);
pListView = new QListView(this);
pListView->setGeometry(0, 0, 400, 400);
pListView->setRootIsDecorated(true);
pListView->addColumn("Book");
pListView->addColumn("Sold Copies");
pListView->addColumn("Price");
pTopic1 = new QListViewItem(pListView, "Topic 1");
pTopic2 = new QListViewItem(pListView, "Topic 2");
pTopic3 = new QListViewItem(pListView, "Topic 3");
pItem = new QListViewItem(pTopic1, "Book 1", "21000", "$29.99");
pItem = new QListViewItem(pTopic1, "Book 2", "21000", "$29.99");
pItem = new QListViewItem(pTopic1, "Book 3", "21000", "$29.99");
pItem = new QListViewItem(pTopic2, "Book 4", "22000", "$39.99");
pItem = new QListViewItem(pTopic2, "Book 5", "22000", "$39.99");
pItem = new QListViewItem(pTopic2, "Book 6", "22000", "$39.99");
pItem = new QListViewItem(pTopic3, "Book 7", "23000", "$49.99");
pItem = new QListViewItem(pTopic3, "Book 8", "23000", "$49.99");
pItem = new QListViewItem(pTopic3, "Book 9", "24000", "$49.99");
connect(pListView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(ShowDescription()));
}
int main(int argc, char **argv)
{
QApplication a(argc, argv);
MyMainWindow w;
a.setMainWidget(&w);
w.show();
return a.exec();
}
上面是完整的程序,我只是按着书本上的例子,做了一个响应双击事件的槽函数而已!编译的时候居然报构造函数的错误?不解!注释掉Q_OBJECT宏程序通过,当然这样的话槽函数也办法了激活了!大家给看看,是什么地方出的错?谢谢
作者:
cyberHunK
时间:
2007-12-03 15:06
很简单的一个例子,问题应该就出在槽函数身上,可我在帮助文档上查找比较没发现什么纰漏。请大家帮帮忙了!
作者:
moyihua
时间:
2007-12-03 23:51
是link问题把?
要把用到的所有文件名加入 .pro文件中,再编译一次,看看
作者:
cyberHunK
时间:
2007-12-04 09:08
应该不是工程的问题,我一般使用qmake -project自动生成.pro
作者:
萎代码
时间:
2007-12-11 10:27
把下面部分 放到一个单独的头文件里面,qt的moc时候要这个头文件的,qt的moc机制决定的
#include <qapplication.h>
#include <qwidget.h>
#include <qlistview.h>
#include <qmessagebox.h>
class MyMainWindow : public QWidget
{
Q_OBJECT
public:
MyMainWindow();
private:
QListView *pListView;
QListViewItem *pItem;
QListViewItem *pTopic1;
QListViewItem *pTopic2;
QListViewItem *pTopic3;
QMessageBox *pBox;
public slots:
void ShowDescription();
};
作者:
cyberHunK
时间:
2007-12-19 10:48
楼上的兄弟,编译连接通过,真的是这样啊!qt的这种机制还真的挺让人费解啊!这里还有个问题需要询问,什么条件下才这样使用moc机制?以前在一个cpp里,也这样直接定义过,当时可以通过啊!不解,请指教!
作者:
cyberHunK
时间:
2007-12-21 10:52
这个槽又出什么问题了?我要单击一个按钮打开字体对话框QFontDialog,感觉没什么问题啊?还要请大家帮忙看看!
建立一个Use_FontDialog.h头文件,如下:
#include <qapplication.h>
#include <qwidget.h>
#include <qfontdialog.h>
#include <qfont.h>
#include <qpushbutton.h>
class MyMainWindow : public QWidget
{
Q_OBJECT
public:
MyMainWindow();
private:
QPushButton *pButton;
QFontDialog *pFDialog;
QFont MyFont;
public slots:
void CallFontDialog();
};
建立一个Use_FontDialog.cpp文件,程序如下:
#include "Use_FontDialog.h"
MyMainWindow::MyMainWindow()
{
setGeometry(100, 100, 640, 480);
pButton = new QPushButton("Open FontDialog", this);
pButton->setGeometry(500, 400, 100, 60);
connect(pButton, SIGNAL(clicked()), this, SLOT(CallFontDialog()));
}
void MyMainWindow::CallFontDialog()
{
bool ok;
MyFont = pFDialog->getFont(&ok);
}
int main(int argc, char **argv)
{
QApplication a(argc, argv);
MyMainWindow w;
a.setMainWidget(&w);
w.show();
return a.exec();
}
先前一位兄弟说qt的moc机制需要单独的头文件,第一个问题已经这样做给解决掉了!现在我也是这样实现的,可为什么又报构造函数的错误,哪里出的问题啊?
[
本帖最后由 cyberHunK 于 2007-12-21 10:55 编辑
]
作者:
萎代码
时间:
2007-12-26 14:41
pFDialog 什么时候new了??qt是基于c++的图形库,建议你准备点c++的基础。
作者:
xuanyuzheng
时间:
2007-12-26 16:29
他用的那个函数是静态函数,不需要对象。
作者:
萎代码
时间:
2007-12-27 15:36
那应该QFontDialog::getFont(&ok)的说吧
作者:
xuanyuzheng
时间:
2007-12-27 18:18
应该是那样,但是他那样写liunx不会报错,所以错误不在这里。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2