目录
1 Qt下载
现在下载Qt需要先注册Qt账号。地址https://www.qt.io。版本Qt creator 7.0,Qt 6.2.3. 网站推荐使用online installer。安装后可用qt根目录的maintenancetool.exe修改安装配置。
2 Qt Creator手册
1 edit toolbar
<>在编辑位置间跳转
打开文件下拉菜单,选择已打开文件
符号下拉菜单,快速定位符号
行号、列号:定位至某行:某列
2 双击某控件更改控件名称。
3 Qt signal & slot
signal是事件,例如按钮点击;slot是处理函数。
在控件上右键点击,出现环境菜单。例如,按钮的clicked(),然后点击OK。
此时,在.h文件添加了on_findButton_clicked()函数声明,在.cpp文件添加了TextFinder::on_findButton_clicked()默认函数体。
int main(int argc, char *argv[])
{
QApplication EditorApp(argc, argv);
Notepad Editor;
Editor.show();
return EditorApp.exec();
}
QApplication声明了一个程序;notepad声明了界面,show显示界面,exec()进入程序循环。
对控件进行设计的文件位于*.ui中,为xml格式。控件都位于ui对象中,通过ui->来进行引用。
Qt文件结构:假如窗口文件名为mainWindow.ui,ui进行处理后产生ui_mainWindow.h,是窗口控件的初始化包含文件。mainWindow.cpp是界面处理类,gui循环都在这里。main.cpp是整个程序的循环,show()和exec()等。
输入文件要打包到资源文件中?
问题描述:
Windows 8环境下,在QtCreator里运行Qt5程序,没有出现问题,但是在工程文件夹下的debug目录下,双击运行生成的.exe文件,却提示丢失Qt5Core.dll。
问题解决:
将Qt5Core.dll所在的目录添加到Windows系统环境变量Path里。
我的Qt5Core.dll所在的目录是:D:\Qt\Qt5.5.1\5.5\mingw492_32\bin
右键我的电脑,选择属性,然后选择高级系统设置 --> 环境变量,编辑Path系统变量,将上述路径添加到后面,注意要用分号分隔每一个不同路径,点击确定后重新运行.exe成功。
今天在用QT写程序的时候,为了测试程序,想要在程序执行的中间过程在用C++中的cout进行输出,但是使用cout<<输出的时候,在“应用程序输出”一栏中并没有任何显示。经过查阅资料发现,原因是.pro的工程文件的内容导致的,在工程文件中加入
CONFIG += console
然后重新构建程序即可。
控件基础
QLineEdit是单行文本输入,一般用于用户名、密码等少量文本交互地方。 QTextEdit用于多行文本,也可以显示HTML格式文本。 QPlainTextEdit与QTextEdit很像,但它多用于需要与文本进行处理的地方,而QTextEdit多用于显示,可以说,QPlainTextEdit对于plain text处理能力比QTextEdit强。
QT creator修改编译设置
QTabWidget只有添加一个任意其他控件后才能显示?
Qt 6+vtk9.1+vs2019配置
vtk9.0.3+vs2019+cmake+Qt编译库 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/390669033 上面都是Qt 5的,下载Qt6的库需要使用前述maintenancetool.exe下载对应的qt库。
Qt6使用cmake构建。
cmake的基本语法:
cmake不区分大小写。
set为设置变量,set(PROJ vtkqt6),将变量PROJ设置为vtkqt6。引用变量用${PROJ}。
qt6+vtk9示例程序,使用了qvtkopenglnativewidget。
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "vtkSmartPointer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderer.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"
#include "vtkCylinderSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkLight.h"
#include "vtkCamera.h"
#include "vtkCGNSReader.h"
#include "vtkAutoInit.h"
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingOpenGL2)
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
vtkSmartPointer<vtkCylinderSource> cylinder =
vtkSmartPointer<vtkCylinderSource>::New();
cylinder->SetHeight( 3.0 );
cylinder->SetRadius( 1.0 );
cylinder->SetResolution( 50 );
vtkSmartPointer<vtkPolyDataMapper> cylinderMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
cylinderMapper->SetInputConnection( cylinder->GetOutputPort() );
vtkSmartPointer<vtkActor> cylinderActor = vtkSmartPointer<vtkActor>::New();
cylinderActor->SetMapper( cylinderMapper );
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor( cylinderActor );
renderer->SetBackground( 0.1, 0.2, 0.4 );
vtkSmartPointer<vtkLight> myLight= vtkSmartPointer<vtkLight>::New();
myLight->SetColor(0,1,0);
myLight->SetPosition(0,0,1);
myLight->SetFocalPoint(renderer->GetActiveCamera()->GetFocalPoint());
renderer->AddLight(myLight);
ui->openGLWidget->renderWindow()->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> iren = ui->openGLWidget->renderWindow()->GetInteractor();
iren->SetRenderWindow(ui->openGLWidget->renderWindow());
}
MainWindow::~MainWindow()
{
delete ui;
}
参考:https://blog.csdn.net/qq_37441588/article/details/118677431
上文中有两个问题:
1,ui.qvtkWidget->GetRenderWindow()->AddRenderer(ren);
这个GetRenderWindow过时了,使用qvtkWidget->renderWindow()代替,
2,QVTKInteractor cannot control the event loop错误
第一种方法,消除vtk的警告:vtkOutputWindow::SetGlobalWarningDisplay(0);
第二种方法,原来QVTKOpenGLWidget会在创建时完成Interactor创建和开启,保证其对窗口的控制,因此
ui.openGLWidget->GetInteractor()->Initialize();
ui.openGLWidget->GetInteractor()->Start();
这两句话是不必要的。
删除这两句话后,程序不再产生vtk错误窗口。
参考链接:https://www.jianshu.com/p/8254be426275