• 6373阅读
  • 12回复

qmainwindow 能否声明在main函数外面? [复制链接]

上一主题 下一主题
离线tzqdo
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-28
我本意是把qmainwindow声明为全局变量,这样其他类就可以访问Qmainwindow里的成员。

QMainWindow mainWindow;

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    mainWindow.show();
    return app.exec();
}

但是这么做,编译没问题。运行时看不见主窗口。请问这是为何
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-28
1. 这叫定义(definition),不叫声明(declaration)

2. 看 QApplication 的 manual
QApplication's main areas of responsibility are:
...
...
Since the QApplication object does so much initialization, it must be created before any other objects related to the user interface are created. QApplication also deals with common command line arguments. Hence, it is usually a good idea to create it before any interpretation or modification of argv is done in the application itself.
离线tzqdo
只看该作者 2楼 发表于: 2009-12-28
引用第1楼dbzhang800于2009-12-28 12:48发表的  :
1. 这叫定义(definition),不叫声明(declaration)
2. 看 QApplication 的 manual

QMainWindow mainwindow;
是定义?

我只是想在main函数外声明下而已
离线xinqingfly

只看该作者 3楼 发表于: 2009-12-28
QMainWindow *mainWindow=NULL;

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
   mainWindow= new QMainWindow;
    mainWindow->show();
    return app.exec();
}

别的用到的cpp文件extern QMainWindow *mainWindow;
菜鸟也是鸟
离线tzqdo
只看该作者 4楼 发表于: 2009-12-28
引用第3楼xinqingfly于2009-12-28 13:57发表的  :
QMainWindow *mainWindow=NULL;
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
.......


谢谢,I will have a try
离线dbzhang800

只看该作者 5楼 发表于: 2009-12-28
引用第3楼xinqingfly于2009-12-28 13:57发表的  :
QMainWindow *mainWindow=NULL;
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
.......


http://www.cuteqt.com/?p=1147
离线tzqdo
只看该作者 6楼 发表于: 2009-12-28
引用第3楼xinqingfly于2009-12-28 13:57发表的  :
QMainWindow *mainWindow=NULL;
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
.......



error C2679: binary '=' : no operator found which takes a right-hand operand of type 'QMainWindow *' (or there is no acceptable conversion)

感觉有点重复定义的意思。
QMainWindow *mainWindow=NULL;什么作用,强制声明么?

对这块不大懂
离线tzqdo
只看该作者 7楼 发表于: 2009-12-28
引用第5楼dbzhang800于2009-12-28 16:23发表的  :
http://www.cuteqt.com/?p=1147


这个帖子我也搜到了,感觉说的不是一个问题
离线tzqdo
只看该作者 8楼 发表于: 2009-12-28
我错了.
   mainWindow= new QMainWindow;
我写成了
   *mainWindow= new QMainWindow;
离线benbenmajia

只看该作者 9楼 发表于: 2009-12-28
我想你即使想做全局的也不用这样的吧,你如果用多线程的话不需要这样,你如果不是多线程的话每次只能利用到一个窗口,何必?
安然.....
离线tzqdo
只看该作者 10楼 发表于: 2009-12-28
引用第9楼benbenmajia于2009-12-28 17:27发表的  :
我想你即使想做全局的也不用这样的吧,你如果用多线程的话不需要这样,你如果不是多线程的话每次只能利用到一个窗口,何必?


我没用多线程。

其实是这样的,mainwindow里面有个lineEdit,我是想在任意地方都能往里面写内容,就像一个日志的东西
离线benbenmajia

只看该作者 11楼 发表于: 2009-12-28
那你可以用fstream啊,直接输出自己的文档不是更简单?
安然.....
离线dbzhang800

只看该作者 12楼 发表于: 2009-12-28
引用第6楼tzqdo于2009-12-28 17:04发表的  :
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'QMainWindow *' (or there is no acceptable conversion)
感觉有点重复定义的意思。
QMainWindow *mainWindow=NULL;什么作用,强制声明么?
对这块不大懂
.......


这个也是定义,不是声明!

引用第6楼tzqdo于2009-12-28 17:04发表的  :
这个帖子我也搜到了,感觉说的不是一个问题
.......


我贴这个链接,是想说最好不要这么用!

引用第6楼tzqdo于2009-12-28 17:04发表的  :
其实是这样的,mainwindow里面有个lineEdit,我是想在任意地方都能往里面写内容,就像一个日志的东西
.......

往控件写东西,用Qt的 signals 和 slots 应该蛮好吧。如果日志的话,可以用 qDebug 一类的输出到文件
快速回复
限100 字节
 
上一个 下一个