1、Qt的dos创建过程
第一步:使用Qt Designer设计好自己想要的界面
第二步:将设计好的界面保存起来,保存文件的后缀一定要是.ui,即如下形式:filename.ui。假设我的界面保存在自己的D盘的Qt for Qt creator目录下的gotocell目录下
第三步:到保存了.ui文件的目录下创建.cpp文件,这个文件是要运行的文件,且要调用到.ui文件
自己的main.cpp文件如下:
#include<QApplication>
#include<QDialog>
#include"ui_gotocelldialog.h"
int main(int argc,char * argv[])
{
QApplication app(argc,argv);
Ui::GoToCellDialog ui;
QDialog * dialog = new QDialog;
ui.setupUi(dialog);
dialog->show();
return app.exec();
}
第四步:打开dos界面
第五步:切换到.ui文件所在的目录,dos中的命令有:
d:
cd Qt for Qt creator
cd gotocell
此时这个目录下只有两个文件,一个使自己在Qt Designer中所创建的gotocelldialog.ui文件和自己在第三步所创建的main.cpp文件
第六步:运行qmake命令(前提是你的qmake目录已经在环境变量PATH中)
命令如下:
qmake -project //此时系统会自动将当前目录下的*.cpp和*.h文件包含到.pro的文件中,这个pro文件是以目录所在命名
//此时在这个目录中又多了一个文件,即为gotocell.pro
qmake gotocell.pro //即在命令qmake后接上一个命令所生成的那个文件名,包括文件后缀.pro
//此时会在这个目录下生成debug和release两个目录,同时也会生成Makefile,Makefile.Debug和Makefile.Release,不过debug和release目录此时是空的
第七步:编译文件(使用nmake命令来编译),具体命令如下:
nmake
//此时会在此目录中多出两个文件,一个使ui_gotocelldialog.h文件(即自己所定义的gotocell.ui文件文件名(不包括文件后缀)前面加上一个ui_前缀),另一个
//文件是vc100.pdb文件(这个文件我不知道有什么用途)
//同时在第六步所生成的debug和release目录不再为空了,它们中间已经有东西存在了
第八步:运行程序
.//先进入此目录下的debug目录
cd debug
//在debug目录中已经有了一个.exe文件,这个文件的文件名是这个工程目录名,在自己这个例子中就是gotocell.exe
//开始运行程序,只要在dos的此工程的debug目录下直接输入这个文件名(包括文件后缀)就可以了
gotocell.exe
上面是自己在使用Qt Designer中可以运行得到最后结果的,由于Qt版本已经操作系统等不同的原因,上面的步骤不一定使用任何人
我只是将自己系统下生成步骤记下来,所以才有了此文章。
来自:http://blog.csdn.net/luyafei_89430/article/details/7994774
最后还是没有解决!!!2014年10月6日12:22:27
QT5.0.1在Windows下 出现QApplication:No such file or directory 问题的解决办法
上网查了一大通,基本都是Linux ubuntu等版本下的解决方案,如下csdn博客:http://blog.csdn.net/apple1985507/article/details/5435358;找了半天在这篇新浪博客找到了答案:
http://blog.sina.com.cn/s/blog_9da24f3b0101epan.html
解决方法是:在HelloWorld.pro工程项目文件中添加一行QT += widgets,然后再编译运行就OK了
我的pro文件改成这样
QT +=coregui
greaterThan(QT_MAJOR_VERSION,4):QT+=widgets
TARGET=HelloWorld
TEMPLATE=app
SOURCES+=\
main.cpp
QObject::connect的error: C1057: 宏扩展中遇到意外的文件结束
无解!!!!
2、用qcreator不能使用中文
1.首先把Qt Creator的编辑器设置为使用 UTF-8,下面是操作顺序:
工具-->选项-->文本编辑器-->行为,在右侧选项界面找到文件编码选项,设置为 UTF-8。
2.使用 QTextStream 时设置编码格式,你的代码修改如下:
QTextStream out(&file);
out.setCodec("utf-8");
QString str("物品名称");
3.用editplus打开相应的文件,然后另存为utf-8就可以了= =
3、moc_dialog.obj:-1:error: LNK2019: 无法解析的外部符号 "private: void __thiscall Dialog::showFile(void)"(?showFile@Dialog@@AAEXXZ),该符号在函数"private: static void __cdecl Dialog::qt_static_metacall(class QObject*,enum QMetaObject::Call,int,void * *)"(?qt_static_metacall@Dialog@@CAXPAVQObject@@W4Call@QMetaObject@@HPAPAX@Z) 中被引用
答:其实这种错误时因为 函数filterDetection 在头文件中有定义,但在cpp 文件中没有实现,就是说原先定义了一个控件,但不想要了却没有删干净。
4、dialog.obj:-1:error: LNK2019: 无法解析的外部符号 "public: __thiscall InputDlg::InputDlg(class QWidget *)"(??0InputDlg@@QAE@PAVQWidget@@@Z),该符号在函数"private: void __thiscall Dialog::showInputDlg(void)"(?showInputDlg@Dialog@@AAEXXZ) 中被引用
答:连接不上,先把项目qmake一下就好了
5、QT对话框中show和exec的区别
QDialog的显示有两个函数show()和exec()。
exec():
显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。函数返回一个DialogCode结果。
在对话框弹出期间,用户不可以切换同程序下的其它窗口,直到该对话框被关闭。
http://www.cnblogs.com/hujianhua/archive/2012/06/24/2559761.html
?6、在学习QPalette的时候发现window背景色和Button的显示有问题,但是不报错
//显示背景颜色
voidPalette::ShowWindow() //这个不知道为什么显示不出来!!!有的说是windows不支持,我也不太清楚2015年1月3日13:51:44
{
QStringListcolorList=QColor::colorNames(); //得到所有的颜色序列
QColorcolor=QColor(colorList[windowComboBox->currentIndex()]); //取得当前选中的序号,得到颜色
QPalettep=contentFrame->palette(); //得到右边的调色板
p.setColor(QPalette::Window,color); //修改相应位置的颜色
contentFrame->setPalette(p); //把调色板的值给应用上去
contentFrame->update(); //刷新界面,得到显示
/*
*QStringListcolorList=QColor::colorNames();
QColorcolor=QColor(colorList[cbbWindow->currentIndex()]);
QPalettep=contentFrame->palette();
p.setColor(QPalette::Window,color);
contentFrame->setPalette(p);
**/
}
//按钮背景颜色
voidPalette::ShowButton() //这个不知道为什么显示不出来!!!有的说是windows不支持,我也不太清楚2015年1月3日13:51:44
{
QStringListcolorList=QColor::colorNames(); //得到所有的颜色序列
QColorcolor=QColor(colorList[buttonComboBox->currentIndex()]); //取得当前选中的序号,得到颜色
QPalettep=contentFrame->palette(); //得到右边的调色板
p.setColor(QPalette::Button,color); //修改相应位置的颜色
contentFrame->setPalette(p); //把调色板的值给应用上去
contentFrame->update();
}
7、关于QVector!!!!!我已经被吓尿(自己理解有误)
inlineconstT&QVector<T>::at(inti)const
{Q_ASSERT_X(i>=0&&i<d->size,"QVector<T>::at","indexoutofrange");
returnd->begin()[i];}
答:浪费我N个小时,最后看了源码才知道,真他妈坑爹,这里at的指向的是迭代器指向的第1个对象的第[i]个!!!
那么QVector<QVector<int> > av;
在这个av里面的 av.at(i).at(j)代表的意思就是这个数组里面的第一个的第i个元素的第1个的第j个元素
比如:{{1,2, 3},{4,5, 6},{7,8, 9}}
那么i=2, j=1代表的是8而不是3
8、注意第i行第j列翻译成坐标就是(j, i)
for(QVector<int>::size_typei=0;i!=HEIGHT;++i) //一行一行地画
{
for(QVector<QVector<int>>::size_typej=0;j!=WIDTH;++j) //一个点一个点来QVector<QVector<int>>::size_type
{
//选到相应的点,是1还是0
switch(map.at(i).at(j))
{
case0: //是空白
// qDebug()<<"0=>"<<i<<","<<j;
myPainter.setBrush(Qt::yellow); //设置画刷
//注意,这里坐标应该是反的,因为是i行第j列坐标就是(j,i)
myPainter.drawPixmap(i*25,j*25,QPixmap(":/images/ground.png"));
break;
case1: //是块砖
// qDebug()<<"1=>"<<i<<","<<j;
myPainter.setBrush(Qt::red); //设置画刷
//画出砖块图形
//注意,这里坐标应该是反的,因为是i行第j列坐标就是(j,i)
myPainter.drawPixmap(i*25,j*25,QPixmap(":/images/stone.png"));
break;
default:
qDebug()<<"idontknownwhathappen"; //未知生物出现在地图
break;
}
}
}
答:这里面有两个注意记住改为下面这个:
9、运行程序之后出现异常错误QIODevice::read:device not open
答:???不知