学习qte5,01
QtE5-在舒适图形中学习D和Qt5环境
QtE5
是D中Qt5
函数绑定(包装器).Qt
是巨大的,QtE5
只是其中很小一部分.是的,我边学习Qt
,边根据需要时绑定,我用D+QtE5
来编写所有Qt项目
.写本文时,QtE5
中约有400
个Qt
函数.
QtE5
在(WinXP,7,10)32位
上,(Win7,10)64位
及Linux32/64
上测试和工作.
除非扩展,不需要安装整个Qt
.但需要dmd
及Qt5
运行时.
QtE5
与Qt
中名称对应.
// ex2.d
import qte5;// 连接QtE5
import core.runtime;// 解析`com.string`
int main(string[] args) {
// 加载并初化QtE5
if (1 == LoadQt(dll.QtE5Widgets, true)) return 1;
// 创建应用
QApplication app = new QApplication(&Runtime.cArgs.argc,Runtime.cArgs.argv, 1);
// 创建标签
QLabel lb = new QLabel(null);
//加文本(支持HTML)并渲染
lb.setText("<h1>哈哈</h1>").show();
// 循环处理图形事件
app.exec();
//完成
return 0;
}
qt
可能不支持gbk
.下个示例:
import qte5;
import core.runtime;//处理输入参数
import std.stdio;
// QTextEdit
extern (C) {
void onKn1(CTest* uk) { (*uk).runKn1(); }
void onKn2(CTest* uk) { (*uk).runKn2(); }
void onD(CTest* uk, int n, int ab) { (*uk).D(ab, n); }
}
class CTest : QFrame {
QVBoxLayout vblAll; // 垂直
QHBoxLayout hb2; // 水平
QTextEdit edTextEdit; //检查编辑器本身
QPushButton kn1, kn2;
QAction acKn1, acKn2, acDes1, acDes2;
QLineEdit lineEdit; //行编辑器
QFrame view;
~this() {
// printf("--20--\n"); stdout.flush();
}
// 默认构造函数
this(QWidget parent, QtE.WindowType fl) { //-> 基本构造函数
super(parent, fl);
// 水平和垂直对齐器
vblAll = new QVBoxLayout(null); //
hb2 = new QHBoxLayout(null); //
// 编辑器
edTextEdit = new QTextEdit(this);
vblAll.addWidget(edTextEdit);
lineEdit = new QLineEdit(this);
lineEdit.setNoDelete(true);
lineEdit.setText("大家好");
lineEdit.setReadOnly(true);
// 图像区
view = new QFrame(this);
view.setMinimumHeight(200);
setFrameShape( QFrame.Shape.Box );
view.setFrameShape( QFrame.Shape.Box );
view.setFrameShadow( QFrame.Shadow.Raised );
// view.setStyleSheet("background: Red");
// 风格
kn1 = new QPushButton("1按钮", this);
kn2 = new QPushButton("2按钮", this);
acKn1 = new QAction(this, &onKn1, aThis);
connects(kn1, "clicked()", acKn1, "Slot()");
acKn2 = new QAction(this, &onKn2, aThis); connects(kn2, "clicked()", acKn2, "Slot()");
hb2.addWidget(kn1).addWidget(kn2);
vblAll.addWidget(lineEdit).addWidget(view).addLayout(hb2);
resize(700, 500); setWindowTitle("Проверка QTextEdit");
setLayout(vblAll);
}
void D(int ab, int n) {
writeln(n, "--------------------------------D---------------------->", ab);
}
void runKn1() { //-> 处理1
writeln("this is Button 1");
// 请求编辑文件并打开编辑器
QFileDialog fileDlg = new QFileDialog('+', null);
string cmd = fileDlg.getOpenFileNameSt("Open file ...", "", "*.d *.ini *.txt");
if(cmd != "") lineEdit.setText(cmd);
}
void runKn2() { //-> 2按钮
writeln("this is Button 2");
}
}
int main(string[] args) {
bool fDebug = true; if (1 == LoadQt(dll.QtE5Widgets, fDebug)) return 1;
QApplication app = new QApplication(&Runtime.cArgs.argc, Runtime.cArgs.argv, 1);
CTest ct = new CTest(null, QtE.WindowType.Window); ct.show().saveThis(&ct);
QEndApplication endApp = new QEndApplication('+', app.QtObj);
return app.exec();
}
注意,处理事件程序,必须声明为extern(C)
.
注意,连接槽
:
connects(kn1, "clicked()", acKn1, "Slot()");
QtE5
无须Qt元编译器
.可相互连接
.
QtE5
很好的补充了D.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现