学习qte5,01

QtE5-在舒适图形中学习D和Qt5环境

QtE5是D中Qt5函数绑定(包装器).Qt是巨大的,QtE5只是其中很小一部分.是的,我边学习Qt,边根据需要时绑定,我用D+QtE5来编写所有Qt项目.写本文时,QtE5中约有400Qt函数.
QtE5(WinXP,7,10)32位上,(Win7,10)64位Linux32/64上测试和工作.
除非扩展,不需要安装整个Qt.但需要dmdQt5运行时.
QtE5Qt中名称对应.

// 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.

posted @   zjh6  阅读(30)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示