QTTab内に作成したObjectの操作の仕方

投稿者: Anonymous Qt 5.7.1 + Qt Creator 4.2.0の環境でアプリを作成しています。 QTで作成した可変するObjectへのアクセス方法がわからず質問させていただきます。 Window内にTabを作成し、その中にラベルとTextEditを作成し、 必要になった時、TextEditの文字列を変更する、TextEditの文字列を取得する という内容を目指しているのですが、Tab内に作成したObject指定の方法がわからず TextEditの文字列を変更することができていない状況です。 以下のような方法で作成しております。 一つのTabの中に最大64個のTextEdit欄を作成するという感じです。 Tabの名前が「Tab0」「Tab1」みたいになり、 Tab0内にQPlainTextEditで作成した入力欄が「te0」「te1」といった感じでいれています。 *tabWidgetからどうすれば作成したTab内のTextEditにアクセスできるでしょうか。 以上、よろしくお願いいたします。 private QTabWidget *tabWidget; void ParamTabWidget::WindowsSetting(unsigned int size) { int tabNum = 0; int lastTabNum = 0; tabNum = size / TABinItem; if( size % TABinItem != 0 ){ tabNum++; lastTabNum = size % TABinItem; } else{…(Continue Reading)

QtのQML拡張プラグイン使用でアプリがクラッシュしてしまう

投稿者: Anonymous こんにちは、Kaedeです。 以前、質問した「qmlのui上にwidgetで作成したuiを取り込む方法」の回答をもとに、Widget(ui)をQML拡張プラグインとして登録し、別プロジェクトのSwipeViewに配置してみました。 しかし、ビルドは通るものの、実行をすると以下ダイアログが表示された後「再試行」でクラッシュしてしまいます。 エラーメッセージは以下の通りです。(一部..に置き換えています。) Starting C:..Qt_ProjectswipeTestPrjswipeTestPrj..builddebugswipeTestPrj.exe… QML debugging is enabled. Only use this in a safe environment. ASSERT: “!d->isWidget” in file kernelqobject.cpp, line 1979 プログラムが突然終了しました。 The process was ended forcefully. C:/../Qt_Project/swipeTestPrj/swipeTestPrj/..build/debug/swipeTestPrj.exe crashed. 【環境】 ・Qt Creator 4.5.1 (Community) ・Qt 5.10.1 ・Qt Quick 2.9 ・windows 10 Pro , MSVC++ Compiler 15.8 このエラーを解決する方法について、ご存知の方がいればご教授頂きたいです。 [19/08/21追記] 以下ファイル構成とソースコードです。 ファイル構成…(Continue Reading)

テキストエディタ作成に強いプログラミング言語は?

投稿者: Anonymous 先日Qtの日本営業店に尋ねましたら、 Qt等では、縦書きの実装などはかなり難しい(できない?) と言われました。 一太郎とか、Wordソフトとかって何のプログラミング言語で かかれているのでしょうか?という質問を検索すると、 やはり企業秘密みたいで、C++とか、そこらへん?みたいな ようです。例えばQtはC++なので、ならばQtでもできるはず ですが、私もできそうな気がしません。(→この質問は 確かに変でした。) 自分で拡張していくしかないのか、先日からお尋ねしている サブクラス化が成功すれば、それなりに融通の利くレイアウトを 実装できるのか、正直わかりません。ただこの辺のドキュメントは 無いと言っていいくらい少なく、正直絶望的です。 この際にお聞きしたいのですが、こういう質問はいいのかわからない のですが、テキストエディタ作成に強いプログラミング言語って ご存知ですか? 追記 詳しい解説有難うございます。[組版文字について:QTextEdit関連、ルビの表記、組立文字等は何とかQtでも実装出来ました。こういうテキスト処理系の話はQtから始めたため、Qtの中だけでもがいてきた感じです。今回は、Qt以外の方向へ眼を向けようとしたための質問でした。sayuriさんのご指摘の通り、組版処理の要件という無料公開の文書をネットで見て、その厳密さに驚いたことがありますが、Qtで何か方法はないかと手探りしてきました。自分はPythonに手を付ける前にPyQtの本を買ってしまったというぐらいの経歴を持っていて、(しかも英語のMarkSummerfield氏のやつです。)GUIというのも知りませんでした。そこからPythonスタートブックから地道にやってきたのですが、正直PyQtって何?という始まりでつまずいている可能性のある存在でした。まだQtでも触った事のないメソッドやクラスもあるため、組み合わせ次第ではできる可能性もあるのではないかという希望を持ちつつ色々やってきました。今の自分のスキルでは皆さんのご助力とともに、ルビや組立文字等、「組版が少しでも増やせた。」というところでも満足するものだと思うんですが、上でも述べたように、Qtでは縦書やらは難しいということだったので、(こう、Qt側から、初めてそれは無理です。と言われた感じなので、)じゃあ別の?という程度の切り替えを意識した質問でした。意図がわかりにくかったようで申し訳ありません。確かにエディタではなくて、ワードプロセッサの方が私の意図通りです。抽象的にテキストを扱うソフトっていうのかどういうべきなのかはわかりませんが、Qtを始めるまえは縦書に難があるとかいう限界自体を知らずに突き進んできたため、こんな質問になりました。Qt以外のライブラリだったらできるか?という感じです。少なくともテキスト処理系に強いプログラミング言語は?ライブラリは?という質問にすべきだったかどうかわかりませんが、とりあえずこの質問はいけないようだったので消そうかなと考えています。  皆さんの意見を自分なりに考えてみると、つまり、Qtは既にC++で書かれたライブラリなので、Qtで無理なら、C++でQtに変わる別のライブラリを構成し、リファレンス公開するレベルにならないといけないということですね。Qtを使ってどうこう言ってるんじゃなくて、Qtを作れるレベルには最低限なってないとだめだと。  Lispですというお答えもいただきましたが、私が一番欲しい解答はこのようなものでした。でも何となくわかったことですが、言語自体を自分で作り、ライブラリを自分で生み出し、ほかの人が作ったライブラリに頼らずに、一から自分で作りなさいと、そういうことなのでしょうか。出来上がった結果としてのライブラリに頼ってたら、確かに根っこは変えられないですね。確かにこういう構造関係を知らないようではそんな事やったこともないため、スキル不足は否めません。  ひょっとすると、Qtで公開されているライブラリのように、誰かが作ってくれたライブラリの中で、テキスト処理系に強いライブラリはありますか?と尋ねるべきだったでしょうか。ほんとこの辺の知識が曖昧なまま進んできたもので、お騒がせして申し訳ありませんでした。  (クローズされるか、この質問は近日中に消そうと思います。) 解決 質問文ではテキストエディタとされていますが、Wikipediaには テキストエディタ(英語: text editor)とはコンピュータで文字情報(テキスト)のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア(プログラム)である。 と説明されています。 他方「縦書きの実装」「一太郎とか、Wordソフトとか」とも言及されています。そもそも作成したいのはテキストエディタではなくワードプロセッサではありませんか? ワープロソフトは、手書きやタイプライタと異なり、文書をコンピュータ上で作成してデータの形で保存するため、後からの修正や再利用、電子メールなどでの添付、文書内の文字検索などが容易であり、印刷せずに画面で表示すればペーパーレス化も可能である。また、文字の装飾や文字間隔の調整、図表の挿入などの編集機能を備えている。主流といわれるワープロソフトには、DTPで使用できるほどの高度な編集機能や、グループで使う事を考慮した世代管理機能や校正機能を持つものもある。 作ろうとしているアプリケーションのゴールを正しく認識しないことには、完成することはないと思います。 一太郎とか、Wordソフトとかって何のプログラミング言語でかかれているのでしょうか?という質問を検索すると、やはり企業秘密みたいで、C++とか、そこらへん?みたいなようです。例えばQtはC++なので、ならばQtでもできるはずですが、私もできそうな気がしません。 縦書き等、文字の厳密なレイアウトを実現するのであれば、フォントの解析はもちろんのこと、画面描画も1dotずつ全て制御する必要があることはわかるはずです。アプリケーションを作成するにはQtを利用していてはだめで、Qtのようなライブラリを作成できるスキルが求められるのではありませんか? なおWordに関しては実装について説明されており、DirectXやOpenGLなどを使用してグラフィックスカードを直接制御しています。マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか テキスト処理系に強いプログラミング言語は?ライブラリは? 縦書きなどテキスト処理を行うとなるとsoramimiさんが具体的な例を挙げてくださいましたが、実はただ単に並べればよいというわけではなく、例えば「(鍵括弧)は90°回転が必要ですし、連綿体(合字)はどうするのという問題も出てくるため「フォントの解析はもちろんのこと」と指摘しました。 結局、1文字ずつレイアウトすることになると思いますが、効率よく行う必要があります。 他の方から適切な言語・ライブラリが提示されない場合、最終的にはOfficeなどが採用しているようにDirectXやOpenGLなどを使用してグラフィックスカードを直接制御することになります。その場合、DirectXであればHLSL; High Level Shading Language、OpenGLであればGLSL; OpenGL Shading Languageといった言語で記述することになります。 回答者: Anonymous

PySide.QtCore.QCharがない。

投稿者: Anonymous python3.5でPySide.QtCore.__version__ 4.8.7を利用しています。 QTextObjectInterfaceの手続きに従おうとしたところ、 QtCore.QCharを利用するよう書いてあるのですが、リファレンスから 削除されたのか見当たりません。QChar.ObjectReplacementCharacter を使いたいです。存在しないアトリビュートを利用しろと書いてある ので厳しいです。また、pythonライブラリの chrでもないようです。 解決 PySideではUnicode文字を直接記述するとのことです。(参考: 本家「i can not find QString in PySide 1.1.0」) ですので、QCharやQStringを介して文字を扱わなくてもよいと思います。 なお、QChar.ObjectReplacementCharacterの値は0xfffcとQCharのAPI文書にあるので、直接指定してみてはいかがでしょうか。 回答者: Anonymous

Qt:フォームの上に配置したウィジェットにスタイルシートが反映されないのと、フレームいっぱいに占領したい

投稿者: Anonymous QtでC++です ウィジェットを別のウィジェットの上に配置したときの質問です 1.メインフォーム上にボタンとフレームを配置 2.フレームに配置するためのウィジェットを2個作成 ウィジェットのクラスは form1000 form1001 3.メインフォームのヘッダのプライベート部分に以下のように宣言 private : form1000 *f1000;//ウィジェット1個目 form1001 *f1001;//ウィジェット2個目 4.コンストラクタ内でフレームの上にウィジェットを配置 f1000 = new form1000(ui-frame);//フレームの上に貼付 f1001 = new form1001(ui-frame);//フレームの上に貼付 //取りあえずクローズ f1000->close(); f1001->close(); 5.ボタンクリックイベントで f1000->showFullScreen(); としたところ、f1000にstylesheetに設定した背景色がキャンセルされ、メイン画面が透過で見えるようになってしまいました 多分クラスの階層がかわったせいだと思うのですがこの様な場合はスタイルシートをどのように記述したら良いのでしょうか Mainwindow::form1000{background-color:blue;}とか Mainwindow::f1000{background-color:blue;} #label{color:white;} など試してみたのですが・・・ 質問としては、 1.他のウィジェット上のフレームに配置したフォームへのスタイルシートの設定方法 2.このやり方だとデザイン時と実際の動作時に見栄えがかわってしまうのでそれもなんとかしたい 3.フレーム上に配置したウィジェットをフレーム全画面に広げたい です 解決 QWidget::showFullScreen()は、ウインドウ(質問文の記載だと「メインフォーム」)でしか効果を表しません。 参考 https://doc.qt.io/qt-5/qwidget.html#showFullScreen Shows the widget in full-screen mode. Calling this function only…(Continue Reading)

¿Cómo puedo solucionar el error de la ausencia del uic en PyQt5?

publicado por: Anonymous Estoy trabajando con Qt Designer, y al momento de querer ver el código Python de la interfaz que he hecho (View Code), me genera ese mensaje de error mostrado en la imagen. Como ven tengo instalado PyQt5, no el 4 y tengo Python 3.6 Necesito saber cómo solucionar este error. Muchísimas Gracias…(Continue Reading)

Warning: deprecated conversion from string constant

publicado por: Anonymous Tengo un warning que no puedo quitar…el mismo me dice “deprecated conversion from string constant to char*”. El código donde se queja es el siguiente: class THREE_DATA_4_COMPUTE { public: THREE_DATA_4_COMPUTE(const QString &cn, char* umn = “”, const QString &un = (const QString)””) { this->curveName = cn; this->unitModuleName = umn; this->unitName = un;…(Continue Reading)

QTextBlockUserDataの使い方

投稿者: Anonymous  いつもお世話になっております。 QTextBlockUserDataについてお聞きしたいのですが、 割注と、縦中横の実現をしてみたいな~と思っています。 PySideのText系のクラスで、最後に怪しいと思っている もので、これが自在に操れるようになればいいな~と思 っています。  Programming Talk-QTextBlockUserData カスタム系では珍しくサンプルコードなどがある分野です。  QTextBlockで、独自のユーザー定義のブロックをセット できるようです。  QTextBlock setUserData ここに書いてある具体例は、仮に私がプログラミングエディタを 作成している場合、統合された開発環境をセットするべく、デバッガ をセットしたいとき、その行(ブロック)を、ブレークポイントにする という独自の設定を行い、セットできるという話のようです。  つまり、コンピューターが、そのブロックはブレークポイントだ、 と判定できるようにするという、確かに他の要素にはない独自の判断要素 をセットできるようです。(ブール型でもできそうな気がする?)  以前の質問より、割注や縦中横を実装したいと思っていますが、これらは どちらも、QTextBlockに関係した物だろうと思います。  ここで、独自のブロックを作成すれば、割注や縦中横を実装できないかな と思っています。  現在、このブロックは、特殊な判定をプログラムに行わせるものなのだな。 という程度で、ブロックのいわば、ブール系の要素を行うためのもので、 ブロックそのものの態様(1本のラインで2行分とか、縦書きとか)を変える事 ができるものだとはなんとなく思っていません。少し手ほどきをしていただけま せんか。お願いします。   解決 ブロックの考え方等、QTextDocumentのデータ(コンテンツ)構造はRich Text Document Structureの文書が参考になると思います。 ここには、QTextBlockは(文字通り)テキストの1ブロックを表すもの、とあります。 「ブロック」の単位をどう定義するかは実装者(プログラマ)次第なので、「割中」や「縦中横」の部分を「ブロック」とするならば、その付加情報としてQTextBlockUserDataを紐付けるのは有効な考え方と思います。(QTextBlockUserDataはQTextBlockに対し1:1の情報であるので) なお、QTextBlockUserDataは何もメソッドを持たないクラス(インターフェース)なので、QTextBlockに自動的に作用する要素はないようです。適切なサブクラスを定義し、アプリケーションが付加情報の読み書きをする必要があるようです。 回答者: Anonymous

ビルトインライブラリのソースコードを見るには

投稿者: Anonymous PySideでWordライクなエディタを作っています。 常に、PySide Documentationなどのリファレンスを 見て、それを組み合わせて使っているのですが、 関数は、全てブラックボックスのため、中でどのような 処理が行われているのか、外からは全く見る事ができません。 こうした基本的なコードが、どのように成り立っているのか は、見る事ができるのでしょうか?  継承関係や、メソッドならリファレンスに書いてあります。 Summerfield氏の本にも、QAbstractTextDocumentLayoutや QTextLayoutについては、全く書かれていません。 しかし、その中身のコードが、どういう仕組みになっているの かを知りたいのですが、どなたかご存知ありませんか?  目的は先日から質問をしているQAbstractTextDocumentLayout の、メソッドの中身を見て、それを基本的なものとして、改良を 加えたいと思いました。ご存知の方はどうか教えてください。  リファレンスは各所にありますが、役所のたらいまわしのようです。 役所の受付の内側や、考えの仕組みを知りたいのです。 解決 Qtのラッパーですから、結局のところC++で書かれたQtのソースを見ることになると思います。 QAbstractTextDocumentLayoutなら以下のところでしょうか。 http://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/text/qabstracttextdocumentlayout.cpp 回答者: Anonymous

QMLのUi上にWidgetで作成したUiを取り込む方法

投稿者: Anonymous お世話になります。Kaedeです。 Widgetで作成したUiが既にあるのですが、それをQMLのUi上に取り込むことって可能でしょうか? (Widget上にQMLを取り込む時に使う「QQuickWidget」の逆のようなものや、それに近い動作を実現する方法があればご教授頂きたいです。) Qt初心者ですので、考え方やクラス、参考リンクなどだけでもご教授いただければ幸いです。 【使用環境】 Qt Creator 4.5.1 (Community) Qt 5.10.1 Qt Quick 2.9 解決 机上知識の回答になりますが、C++で記述したWidgetをQt Quickで利用するには、QQmlExtensionPluginでラップしてQMLの型として登録する必要があると思います。詳しくは以下を参照してみてください。 Writing QML Extensions with C++ : Chapter 6: Writing an Extension Plugin 参考になれば幸いです。 回答者: Anonymous

QSoundで出力した音がシステム音になる。

投稿者: Anonymous QSoundを使って、WAVEファイルを再生したいと思っています。サンプルとしてhello.wavというWAVEファイルを作成し、それを使ってテストをしてみようと思ったのですが、ポーン!というシステム音が出るだけで、全くヘローといってくれません。  そのWAVEファイルをダブルクリックすると、ちゃんとそれなりのソフトでは、ITunesやMicrosoft Media Player等、ほか色々では、ちゃんとヘローとあいさつしてくれます。どこかコードに悪いところがあるのでしょうか?   Microsoft Windows The underlying multimedia system is used; only WAVE format sound files are supported. Wavファイルしか使えないようです。以下がサンプルコードです。 from PySide import QtGui from PySide import QtCore import sys import os class HelloSpeaker(QtGui.QPushButton): def __init__(self,parent=None): super(HelloSpeaker,self).__init__(parent=None) self.setText(“再生”) self.connect(self,QtCore.SIGNAL(“clicked()”),self.play_sound) def play_sound(self): sound = QtGui.QSound(os.getcwd()+”hello.wav”) sound.play(os.getcwd()+”hello.wav”) def main(): try: QtGui.QApplication([]) except Exception as…(Continue Reading)

Como hacer un .exe en linux y qt

publicado por: Anonymous ultimo error que obtengo al hacer make: ya hice lo del mxe root y lo de el make pero al hacer el make me da esto make[1]: i686-w64-mingw32.static-g++: No se encontró el programa Makefile.Release:333: fallo en las instrucciones para el objetivo ‘release/main.o’ make[1]: * [release/main.o] Error 127 make[1]: se sale del directorio…(Continue Reading)

Interfaz para ventana “guardar como” archivos en qt-Creator

publicado por: Anonymous ¿Alguno conoce la manera de que, dado un botón en QT, que yo le asigne para guardar algo y, al presionarlo se me desplegue una ventana de guardar como? Es decir, esa ventana que se abre cuando descargamos algo y nos pide donde lo queremos guardar. solución Debes usar la función: QString…(Continue Reading)

Qtで新しいウィジェットを表示した後でも、フォーカスが移らないようにしたい。

投稿者: Anonymous 例えば日本語のキーボードや、中国語のキーボードのように、リストウィジェットを出してその後スムーズに元の編集へと帰りたいのですが、フォーカスがそちらの方へ移ってしまいます。 すぐに元のエディタへと戻るように、フォーカスを変化させたいのですが、どうすればよろしいでしょうか? ちなみに、テキストエディタは、MainWindowに備えられたQGraphicsViewに、QGraphicsSceneを備えた上で、セットされたQTextEditの場合とします。 色々Focus系をいじってみたのですが、いまいちわかりませんでした。 追記 前までは、releaseEvent内に入れていたコードを、リストウィジェットをshow()した後に入れ込めば、すぐにリストウィジェットが消え、元の処理に帰ることができました。 しかし、私が現在実装しようとしているコードは、なぜかフォーカスがはずれてしまい、カーソル自体が点滅しなくなり、どこにカーソルがあるのかわからなくなります。 focusWidget()で調べても、確かにその編集中のウィジェットがフォーカスを有していますし、なぜこのようなことが起るのかわかりません。 どこにフォーカスが移ったとしても、その後フォーカスを、常にピンポイントでダイレクトにセットするような、そんな方法はご存知ありませんか? 以下はサンプルコードです。 from PySide import QtCore from PySide import QtGui import sys class MainWindow(QtGui.QMainWindow): def __init__(self,parent=None): super(MainWindow,self).__init__(parent=None) self.mainview = QtGui.QGraphicsView() self.mainscene = QtGui.QGraphicsScene() self.maintextedit = CustomTextEdit() self.mainscene.addWidget(self.maintextedit) self.mainview.setScene(self.mainscene) self.setCentralWidget(self.mainview) class CustomTextEdit(QtGui.QTextEdit): def __init__(self,parent=None): super(CustomTextEdit,self).__init__(parent=None) self.listwidget = QtGui.QListWidget() self.listwidget.setFocusPolicy(QtCore.Qt.NoFocus) def keyPressEvent(self,event): self.listwidget.show()        self.listwidget.clearFocus() self.activateWindow() self.setFocus()…(Continue Reading)

Simular comandos cd .. o cambiar directorio con c++ y QT

publicado por: Anonymous Hola estoy intentando implementar en c++ con un vector que pueda simular por ejemplo el comando cd .. de esa manera podría volver a mi anterior ruta o tambien pueda guardar la ruta actual para poder mostrarla. El codigo es el siguiente: //store the paths you iterate std::vector<QString> paths; paths.emplace_back(“first path”); paths.emplace_back(“second…(Continue Reading)

C++ GUI Programming with Qt 4 GoToCellDialog 作成時にエラーが発生します。

投稿者: Anonymous Qt Creator 4.7.0 を用いて、上記タイトルの本を読みながら、コードの実行を試みています。3個目の例なのですが、エラーが出ます。 Rapid Dialog Designという章 gotocelldialogを作成する事が目的です。 Exampleファイルはこちらからダウンロード可能です。 pdfファイルはこちらから無料公開されているようです。 デバッグを開始するとこうなります。 一応本の指示に従ってコードを書いて、UIファイルも作っているつもり なのですが、エラーが出ます。 もしかするとバージョンの違いでしょうか? ご丁寧に、Qt Creatorは或る程度自動でコードを付与してくれて、 とても助かりますが、本の内容とずれているように思えるところがあり、 これは正しいかどうかわからないです。 Qtのバージョンは、5.9.6です。 生じるエラー gotocell.pro file #————————————————- # # Project created by QtCreator 2018-09-08T09:20:46 # #————————————————- QT += core gui widgets TARGET = gotocell TEMPLATE = app # The following define makes your compiler emit warnings if…(Continue Reading)

Qt Creator デザインモードで相対的な配置をしたい

投稿者: Anonymous Qt Creator で hoge.ui.qml を作成、以下のような構成にエレメントを配置しました。 item1 (Item) ┗sliderHorizontal1 (Slider) ┗button1 (Button) この際、sliderHorizontal1 と button1 は親となる item1 の上下一杯を占有したいので、上下にアンカーを設定し、ターゲットに parent を指定の上、Margin を 0 にしました。 この試みは成功しましたが左右の配置に問題があります。 sliderHorizontal1 は親の左側 75% を占有、button1 は残りの 25% を占有したいので、Margin に 100 を入力、 (item1 の既定サイズはどうやら 400×400 となるようで、これで少なくともエディタ上では右側 1/4 が空きます) 続いて button1 の左アンカーを parent から sliderHorizontal1 に変更しました。ちなみに item1 は親エレメントで anchors.fill: parent と指定しています。 これで試したところ、sliderHorizontal1 は…(Continue Reading)

Qtを用いたSDカードのデータ(動画ファイルなど)の読み書きについて

投稿者: Anonymous 最近、Qtの質問ばかりさせて頂いているKaedeです。 表題の件につきまして、探し方がよろしくないのか目的に該当する資料が見つけられません。 やりたい事としては、動画ファイルをSDに保存したり、SDから読みだして再生したいのです。 そこで教えて頂きたいのが、 QtのAPIまたはサンプルコードでSDカードにデータを読み書きするものはあるか (上記がない場合)Qtで使用できる外部のAPIなどについて 上記の2つに関してです。 「OSによって処理が変わる」などの場合はWindowsかLinuxの場合についてお教えいただきたいです。 外部ストレージ初心者で、正直どう扱うのか想像もできないので…(;’∀’) 何かご存知の方はご教授お願い致します。 解決 WindowsやLinuxの場合、SDカードであることを意識する必要はないので、通常のファイルと同様の処理をすればよいと思います。 つまり、QFileクラスでオープンしたいファイルパスを指定して、 読み取るのであれば、QIODevice::ReadOnly等を引数にしてopen()を呼び出し、read()で読み出し 書き出すのであれば、QIODevice::WriteOnly等を引数にしてopen()を呼び出し、write()で書き出し という処理を行えばよいと思います。 Qt付属のサンプルプログラムでQFileをメインにしたものは見当たりませんでしたが、QFileの説明にコードサンプルが載っているので、それを参考にしてはどうでしょうか? なお、動画の読み書き(再生/録画)であれば、Qt Multimedia のモジュールを使った方が楽かもしれません。 再生であればQMediaPlayerや、QVideoWidget。 録画であればMediaRecorder どの場合も、ファイルを明示的に読み書きしなくても、ファイルパス(QUrl)を指定してやればモジュール内で適切に処理してくれると思います。 回答者: Anonymous

Convertir QString a char

publicado por: Anonymous ¿Cómo se convierte un QString a char? algún modo facil y comprensible? Es para entenderlo mejor gracias. solución QString dispone del método toStdString() que te devuelve un std::string. Obtener un char a partir de este objeto es trivial: QString cadena = “Hola”; std::string cadenaStd = cadena.toStdString(); char c = cadenaStd[0]; std::cout <<…(Continue Reading)

テキストエディタ作成に強いプログラミング言語は?

投稿者: Anonymous 先日Qtの日本営業店に尋ねましたら、 Qt等では、縦書きの実装などはかなり難しい(できない?) と言われました。 一太郎とか、Wordソフトとかって何のプログラミング言語で かかれているのでしょうか?という質問を検索すると、 やはり企業秘密みたいで、C++とか、そこらへん?みたいな ようです。例えばQtはC++なので、ならばQtでもできるはず ですが、私もできそうな気がしません。(→この質問は 確かに変でした。) 自分で拡張していくしかないのか、先日からお尋ねしている サブクラス化が成功すれば、それなりに融通の利くレイアウトを 実装できるのか、正直わかりません。ただこの辺のドキュメントは 無いと言っていいくらい少なく、正直絶望的です。 この際にお聞きしたいのですが、こういう質問はいいのかわからない のですが、テキストエディタ作成に強いプログラミング言語って ご存知ですか? 追記 詳しい解説有難うございます。[組版文字について:QTextEdit関連、ルビの表記、組立文字等は何とかQtでも実装出来ました。こういうテキスト処理系の話はQtから始めたため、Qtの中だけでもがいてきた感じです。今回は、Qt以外の方向へ眼を向けようとしたための質問でした。sayuriさんのご指摘の通り、組版処理の要件という無料公開の文書をネットで見て、その厳密さに驚いたことがありますが、Qtで何か方法はないかと手探りしてきました。自分はPythonに手を付ける前にPyQtの本を買ってしまったというぐらいの経歴を持っていて、(しかも英語のMarkSummerfield氏のやつです。)GUIというのも知りませんでした。そこからPythonスタートブックから地道にやってきたのですが、正直PyQtって何?という始まりでつまずいている可能性のある存在でした。まだQtでも触った事のないメソッドやクラスもあるため、組み合わせ次第ではできる可能性もあるのではないかという希望を持ちつつ色々やってきました。今の自分のスキルでは皆さんのご助力とともに、ルビや組立文字等、「組版が少しでも増やせた。」というところでも満足するものだと思うんですが、上でも述べたように、Qtでは縦書やらは難しいということだったので、(こう、Qt側から、初めてそれは無理です。と言われた感じなので、)じゃあ別の?という程度の切り替えを意識した質問でした。意図がわかりにくかったようで申し訳ありません。確かにエディタではなくて、ワードプロセッサの方が私の意図通りです。抽象的にテキストを扱うソフトっていうのかどういうべきなのかはわかりませんが、Qtを始めるまえは縦書に難があるとかいう限界自体を知らずに突き進んできたため、こんな質問になりました。Qt以外のライブラリだったらできるか?という感じです。少なくともテキスト処理系に強いプログラミング言語は?ライブラリは?という質問にすべきだったかどうかわかりませんが、とりあえずこの質問はいけないようだったので消そうかなと考えています。  皆さんの意見を自分なりに考えてみると、つまり、Qtは既にC++で書かれたライブラリなので、Qtで無理なら、C++でQtに変わる別のライブラリを構成し、リファレンス公開するレベルにならないといけないということですね。Qtを使ってどうこう言ってるんじゃなくて、Qtを作れるレベルには最低限なってないとだめだと。  Lispですというお答えもいただきましたが、私が一番欲しい解答はこのようなものでした。でも何となくわかったことですが、言語自体を自分で作り、ライブラリを自分で生み出し、ほかの人が作ったライブラリに頼らずに、一から自分で作りなさいと、そういうことなのでしょうか。出来上がった結果としてのライブラリに頼ってたら、確かに根っこは変えられないですね。確かにこういう構造関係を知らないようではそんな事やったこともないため、スキル不足は否めません。  ひょっとすると、Qtで公開されているライブラリのように、誰かが作ってくれたライブラリの中で、テキスト処理系に強いライブラリはありますか?と尋ねるべきだったでしょうか。ほんとこの辺の知識が曖昧なまま進んできたもので、お騒がせして申し訳ありませんでした。  (クローズされるか、この質問は近日中に消そうと思います。) 解決 質問文ではテキストエディタとされていますが、Wikipediaには テキストエディタ(英語: text editor)とはコンピュータで文字情報(テキスト)のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア(プログラム)である。 と説明されています。 他方「縦書きの実装」「一太郎とか、Wordソフトとか」とも言及されています。そもそも作成したいのはテキストエディタではなくワードプロセッサではありませんか? ワープロソフトは、手書きやタイプライタと異なり、文書をコンピュータ上で作成してデータの形で保存するため、後からの修正や再利用、電子メールなどでの添付、文書内の文字検索などが容易であり、印刷せずに画面で表示すればペーパーレス化も可能である。また、文字の装飾や文字間隔の調整、図表の挿入などの編集機能を備えている。主流といわれるワープロソフトには、DTPで使用できるほどの高度な編集機能や、グループで使う事を考慮した世代管理機能や校正機能を持つものもある。 作ろうとしているアプリケーションのゴールを正しく認識しないことには、完成することはないと思います。 一太郎とか、Wordソフトとかって何のプログラミング言語でかかれているのでしょうか?という質問を検索すると、やはり企業秘密みたいで、C++とか、そこらへん?みたいなようです。例えばQtはC++なので、ならばQtでもできるはずですが、私もできそうな気がしません。 縦書き等、文字の厳密なレイアウトを実現するのであれば、フォントの解析はもちろんのこと、画面描画も1dotずつ全て制御する必要があることはわかるはずです。アプリケーションを作成するにはQtを利用していてはだめで、Qtのようなライブラリを作成できるスキルが求められるのではありませんか? なおWordに関しては実装について説明されており、DirectXやOpenGLなどを使用してグラフィックスカードを直接制御しています。マイクロソフトは、C++でいかにしてMicrosoft Officeのクロスプラットフォームを実現したのか テキスト処理系に強いプログラミング言語は?ライブラリは? 縦書きなどテキスト処理を行うとなるとsoramimiさんが具体的な例を挙げてくださいましたが、実はただ単に並べればよいというわけではなく、例えば「(鍵括弧)は90°回転が必要ですし、連綿体(合字)はどうするのという問題も出てくるため「フォントの解析はもちろんのこと」と指摘しました。 結局、1文字ずつレイアウトすることになると思いますが、効率よく行う必要があります。 他の方から適切な言語・ライブラリが提示されない場合、最終的にはOfficeなどが採用しているようにDirectXやOpenGLなどを使用してグラフィックスカードを直接制御することになります。その場合、DirectXであればHLSL; High Level Shading Language、OpenGLであればGLSL; OpenGL Shading Languageといった言語で記述することになります。 回答者: Anonymous

Llamar una función de un archivo cpp desde otro cpp

publicado por: Anonymous actualmente programo un proyecto en C++ con el IDE Qt2.8.1 basado en el 5.1.1, El problema es que necesito llamar a una función de un archivo a.cpp desde un archivo b.cpp El objetivo es realizar una llamada a la función a::suma( ) sin necesitar crear una instancia de la clase a. a.h…(Continue Reading)

ボタンの名前を日本語にしたい(Qt Creator 3.3.1)

投稿者: Anonymous Qt Creator 3.3.1 でアプリ開発の勉強中です。 以下のコードだとCancelなどのボタンの名前が変えられません。 Cancelをキャンセル、Saveを保存などの日本語に変えたいのですが、 どのようにすればよろしいでしょうか? QMessageBox::StandardButton ret; ret = QMessageBox::warning(this, tr(“Application”), tr(“The document has been modified.n” “この変更をセーブしますか?”), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); 解決 メッセージボックスを表示する前に、日本語の言語ファイルをロードしてください。 QTranslator translator; translator.load(“qt_ja_JP”, QLibraryInfo::location(QLibraryInfo::TranslationsPath)); qApp->installTranslator(&translator); 回答者: Anonymous

QWebViewでのスクロールについて

投稿者: Anonymous C++もQtも初心者ですので初歩的な間違いや勘違いを多くしているかもしれませんが、申し訳ありませんがどうかお付き合いください。 C++/Qt5でプログラムを作っていますが、そのUIにQWebViewを使っています。 テンプレートのHTMLファイルを読み込み(QFileやQTextStreamを使ってQStringへと読み込み、QWebFrame::setHtmlに渡しています)、QWebFrame::findFirstElementで場所を検索し、QWebElement::appendInsideで表示したいデータを流し込むような形で作っています。 プログラムの用途上、何度もテンプレートから読み込みなおして作りなおす場面が登場するのですが、その時にスクロール位置を固定したいと思っています。そこで、QWebFrame::scrollPositionで現在のスクロール位置を取得しておき、テンプレートを読みUIを作りなおしてから、QWebFrame::setScrollPositionで元の位置に戻そうと考えました。 ですがsetScrollPositionを実行しても画面に反映されません。適宜qDebugでscrollPositionで得られたQPointの中身を見てみても、正常に値は取得出来ているようです(setScrollPositionだけが動作していない?)。引数にQPoint(x,y)で決め打ちで渡しても動いていないようです。 UIを作りなおす部分を省いた状態で(画面をリロードせず)setScrollPositionを実行すると期待した通りの動作となります。 そこで、 ・scrollPosition、setScrollPositionとはこのような使い方で正しいでしょうか? ・他に考えられる手はありますでしょうか? なかなか要領を得ない質問文となってしまいましたが、よろしくお願い致します。 解決 QWebElement::appendInside の実行時にはコンテンツのサイズの再計算が行われない(遅延されているか、表示時に行われる)ため、スクロール位置の調整もコンテンツのサイズの再計算が行われた後にする必要があるようです。 回答者: Anonymous

¿Como dejar fijo el tamaño de una ventana de dialogo QT?

publicado por: Anonymous Buenas, Estoy trabajando con la librería qt. Quisiera saber como desactivar el re dimensionamiento de una ventana de dialogo. Es decir fijar el width y height de la misma. Para que se entienda, no quiero maximizar o minimizar la ventana. Simplemente al pasar el cursor del mouse sobre los extremos de la…(Continue Reading)

Qt (c++)でWindowsとLinuxを認識するマクロ

投稿者: Anonymous LinuxとWindowsで動作するアプリをQt上で作成しています 同じソースをLinuxとWindowsでそれぞれビルドしているのですが ビルドする際にWindowsかLinuxかを判定するようなマクロはないでしょうか LinuxとWindowsで動作を変えたいのですが マクロで切り替えたいのですが探しきれませんでした Windows側はMinGW64bitを使用しています 解決 kunifさんの回答にある、コンパイラの判別方法の他に、Qtで定義されているプラットフォーム別のマクロがあります。 https://wiki.qt.io/Get_OS_name https://doc.qt.io/qt-5/qtglobal.html #ifdef Q_OS_WIN や #ifdef Q_OS_LINUX を使うと良いです。 回答者: Anonymous

Qt の GridLayout にて、予め指定したグリッド数でカラムを分割したい

投稿者: Anonymous Qt上のグリッドレイアウトで悩んでいます いくつかのカラム数に分割してラベルを配置したいのですが あらかじめ縦横の分割数を設定することは可能でしょうか lblDummyMainUpLeft = new QLabel(); lblDummyMainBottomRight = new QLabel(); //左上 lblDummyMainUpLeft->setText("topleft(0,0)"); lblDummyMainUpLeft->setStyleSheet("border:2px solid red;"); //右下(4,5)のところに配置したい lblDummyMainBottomRight->setText("bottomright(4,5)"); lblDummyMainBottomRight->setStyleSheet("border:2px solid red;"); //QGridLayout上に配置 gridmain->addWidget(lblDummyMainUpLeft,0,0,1,1); gridmain->addWidget(lblDummyMainBottomRight, 4, 5 , 1 , 1); //●Y=1,X=1に配置されてしまう 本当は細かく分割した箱があって、2個目のラベルを右下に配置したいのですが、2分割しかされませんでした あらかじめ縦横の分割数を決定しておくことは可能でしょうか ・・・まあ、透明なラベルを個数分敷き詰めれば上手く行くと言えば行くのですがちょっとスマートじゃないな・・と・・ 解決 ありがとうございます。 複数の解像度で動作して、基本は等間隔で並ぶのでカラムごとに 最小、最大を一々求めるのは上手く行かなかったです とりあえず、あらかじめダミーのラベル(この場合は横に5列、縦に4列)のからのラベルを敷き詰めて それから本命のパーツをはめ込んで上手く行ったのでそれで解決としました 回答者: Anonymous

QtでC#のbackgroundworkerのようなもの

投稿者: Anonymous QtでC#のbackgroundworkerのようなものを実現するにはどうすればいいのでしょうか 解決 既に回答にあるような、QRunnableを使用する方法のほか、QThreadを使う方法もあります。 例として、メインウィンドウにボタンが1個置いてあるアプリケーションを想定します。 QThreadを継承したクラスを作成します。 MyWorker.h #ifndef MYWORKER_H #define MYWORKER_H #include <QThread> class MyWorker : public QThread { Q_OBJECT protected: virtual void run(); signals: void notifyCompleted(); }; #endif // MYWORKER_H MyWorker.cpp #include “MyWorker.h” void MyWorker::run() { msleep(2000); // あんなことやこんなことを行う emit notifyCompleted(); } run()の中で時間のかかる処理を行い、完了したら、メインスレッドに通知するためのシグナルを実行します。上の例で、notifyCompleted()は、ヘッダファイルでsignalsと定義されており、この関数の中身は、Qtのmocが自動生成してくれます。Qt Creatorで開発する場合は、特に意識する必要はありません。 次は、スレッドの生成元です。 このオブジェクトをMainWindowのメンバに持たせます。 private: MyWorker worker; ボタンが押されたら、スレッドを開始します。(既に実行中ならその旨表示します) void MainWindow::on_pushButton_clicked() {…(Continue Reading)

Qtでグローバルクラス

投稿者: Anonymous 発想がC#寄りなのかもしれないのですがQt(C++)でグローバルクラスを使用したいです C#はProgram.csにstatic宣言したクラスをアプリ全体で使うクラスにして 通信やログの出力に使用していましたが Qtではそんな使い方はしないのでしょうか 最終的にはアプリでバックグランドで動作するクラスが一番親になって 画面遷移をコントロールするところまで行きたいのですが Qtではそんな使い方はしないのでしょうか サンプルでもフォームが一番のものばかりですが、何か良いサンプルは無いでしょうか 解決 C#言語と異なり、C++言語ではクラス外に変数や関数を定義可能です。ただし、ヘッダーファイル内で定義してしまうと、インクルード先それぞれで実体化されるため意図した動作にならないかもしれません。ヘッダーファイル内で完結させる書き方もありますが、まずは宣言と定義を分離し、ヘッダーファイルに宣言を、cppファイルに定義を記述することをお勧めします。 サンプルもなにも、sprintf等、既に自由に使われているはずで、それを参照するといいと思います。 回答者: Anonymous

組版文字について:QTextEdit関連

投稿者: Anonymous  QTextEditで文書の作成プログラムを作っています。 ルビの入れ方や罫線など、Wordソフトで拡張書式 と言われている部分の実装ができません。 日本語組版というものです。 HTMLでルビを入れようにも、対応していない ブラウザで()書きにされてしまいます。 よってHTMLやCSSも対応ブラウザでないという 事で一蹴されてしまいます。  自分のプログラムにこういうものを組み 込むための方向性というか、手がかりが全く つかめません。組版の本やウェブページは ありますが、組版そのものの解説ばかり です。JIS X 4051 が、日本語組版の 規格みたいなのですが、私はその導入自体 をどうすればいいのか 悩んでいます。  何かご存知の方はご教授ください。   解決 QTextEditで表現できるものはQtのドキュメント「Supported HTML Subset」に記載がある範囲です。(HTML4のサブセットとのことです) これを読むとルビ表現はできないようです。 ですので、QTextDocumentを用いて自力で文書構造を実現する方法になるかと思います。 なお、Word文書を例に書かれていたので、ODF(OpenDocument Format)データが読み込めないかと思いましたが、本家に同じ質問(Read .odf file with Qt(2012-05-07))があり、Qtだけでは難しい旨 回答がついていました。 回答者: Anonymous

Qtでシリアル通信 (connect関数がコンパイルエラー)

投稿者: Anonymous Qtでシリアル通信しようとしており、クラスの中でイベントを受信したいのですが QObject::connect 関数でシグナルとコールバック関数を結びつけるところでエラーになってしまいます 参考にしたいくつかのサンプルではフォームの中で connect 関数を使っていると上手く行くようなのですが 単独のクラス内で使うと上手く行かないみたいです connect 関数の引数の考え方が間違っているようなのですが 引数は クラスの実態 シグナル 送信元 コールバック と思っていたのですが・・・ Qtはどうにもこうにも資料が少なくちょっと困ってます base.h #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo> /** * @struct シリアルポート設定構造体 * @breif シリアルポートの設定情報 */ struct TSettingSerial{ QSerialPort::BaudRate rate; //!< ボーレート QSerialPort::DataBits databits; //!< データビット QSerialPort::Parity parity; //!< パリティ QSerialPort::StopBits stopbits; //!< ストップビット QString strComName; //!< シリアルポートのデバイス名称 }; /**…(Continue Reading)