免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4835 | 回复: 10
打印 上一主题 下一主题

请大家帮忙看看这段程序,感觉没有错误,可就是编不过去![qt] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-03 14:19 |只看该作者 |倒序浏览
#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宏程序通过,当然这样的话槽函数也办法了激活了!大家给看看,是什么地方出的错?谢谢

论坛徽章:
0
2 [报告]
发表于 2007-12-03 15:06 |只看该作者
很简单的一个例子,问题应该就出在槽函数身上,可我在帮助文档上查找比较没发现什么纰漏。请大家帮帮忙了!

论坛徽章:
0
3 [报告]
发表于 2007-12-03 23:51 |只看该作者
是link问题把?
要把用到的所有文件名加入 .pro文件中,再编译一次,看看

论坛徽章:
0
4 [报告]
发表于 2007-12-04 09:08 |只看该作者
应该不是工程的问题,我一般使用qmake -project自动生成.pro

论坛徽章:
0
5 [报告]
发表于 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();   
};

论坛徽章:
0
6 [报告]
发表于 2007-12-19 10:48 |只看该作者
楼上的兄弟,编译连接通过,真的是这样啊!qt的这种机制还真的挺让人费解啊!这里还有个问题需要询问,什么条件下才这样使用moc机制?以前在一个cpp里,也这样直接定义过,当时可以通过啊!不解,请指教!

论坛徽章:
0
7 [报告]
发表于 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 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-12-26 14:41 |只看该作者
pFDialog 什么时候new了??qt是基于c++的图形库,建议你准备点c++的基础。

论坛徽章:
0
9 [报告]
发表于 2007-12-26 16:29 |只看该作者
他用的那个函数是静态函数,不需要对象。

论坛徽章:
0
10 [报告]
发表于 2007-12-27 15:36 |只看该作者
那应该QFontDialog::getFont(&ok)的说吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP