Динамическая алфавитная навигация

Чтобы ответить на ваш вопрос: Нет, QSharedMemory не имеет такой функции.

Если вы просто хотите иметь приложение с одним экземпляром, вы можете использовать https: // github.com/Skycoder42/QSingleInstance.

У вас есть только один экземпляр вашего приложения за один раз, он может автоматически вывести активное окно на передний план и позволяет вам передавать параметры из новый процесс для запуска.

Простой пример:

#include "mainwindow.h"
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSingleInstance instance;

    MainWindow *w = NULL;

    instance.setStartupFunction([&]() -> int {
        w = new MainWindow(NULL);
        instance.setNotifyWindow(w);
        w->show();
        return 0;
    });

    QObject::connect(qApp, &QApplication::aboutToQuit, [&](){
        delete w;
    });

    QObject::connect(&instance, &QSingleInstance::instanceMessage, [&](QStringList args){
        QMessageBox::information(w, "Message", args.join('\n'));
    });

    return instance.singleExec();
}

Это покажет главное окно, точно так же, как вы ожидаете. Если приложение запускается во второй раз, текущее основное окно будет выведено на передний план и будет показано сообщение с аргументами.

Примечание. В этом примере используются QWidgets, но QSingleInstance может также можно использовать с графическим или ядерным приложением.

8
задан Anant Singh---Alive to Die 14 December 2017 в 07:02
поделиться

4 ответа

Так, было много хороших предложений, но ни один не сделал точно, что я хотел. К счастью, я смог использовать их для выяснения то, что я действительно хотел сделать. Единственная вещь, которую не делает следующее, распечатать последние несколько неиспользованных букв (если существует кто-либо). Вот почему у меня есть это cfif проверка оператора 'W', поскольку это - последняя буква, которую я использую, иначе это должно проверить на Z.

<cfquery datasource="#application.dsn#" name="qTitles">
SELECT title, url, substr(titles,1,1) as indexLetter
FROM list
ORDER BY indexLetter,title
</cfquery>

<cfset linkLetter = "#asc('A')#">
<cfoutput query="titles" group="indexletter">
    <cfif chr(linkLetter) eq #qTitles.indexletter#>
        <a href="###ucase(qTitles.indexletter)#">#ucase(qTitles.indexletter)#</a>
        <cfif asc('W') neq linkLetter>|</cfif>
        <cfset linkLetter = ++LinkLetter>
    <cfelse>
        <cfscript>
        while(chr(linkLetter) != qTitles.indexletter)
                {
                        WriteOutput(" " & chr(linkLetter) & " ");
                        IF(linkLetter != asc('W')){WriteOutput("|");};
                        ++LinkLetter;
                }
        </cfscript>

        <a href="###ucase(qTitles.indexletter)#">#ucase(qTitles.indexletter)#</a>
        <cfif asc('W') neq linkLetter>|</cfif>
        <cfset linkLetter = ++LinkLetter>
    </cfif>
</cfoutput>

<ul>
<cfset currentLetter = "">
<cfoutput query="qTitles" group="title">
<cfif currentLetter neq #qTitles.indexletter#>
    <li><a name="#ucase(qTitles.indexletter)#">#ucase(qTitles.indexletter)#</a></li>
</cfif>
<cfset currentLetter = #qTitles.indexletter#>
<li><a href="#url#">#title#</a></li>
</cfoutput>
</ul>
0
ответ дан 5 December 2019 в 19:04
поделиться

Для генерации панели навигации Вы могли сделать что-то вроде этого:

<cfoutput>
<cfloop from="#asc('A')#" to="#asc('Z')#" index="i">
    <a href="###chr(i)#">#chr(i)#</a>
    <cfif asc('Z') neq i>|</cfif>
</cfloop>
</cfoutput>

(CFLOOP не работает над символами, таким образом, необходимо преобразовать в коды ASCII и назад.)


Для отображения объектов в запросе, Вы могли сделать что-то вроде этого.

<cfset currentLetter = "">
<cfoutput query="data">
<cfif currentLetter neq left(data.name, 1)>
    <h3><a name="#ucase(left(data.name, 1))#">#ucase(left(data.name, 1))#</a></h3>
</cfif>
<cfset currentLetter = left(data.name, 1)>
#name#<br>
</cfoutput>
5
ответ дан 5 December 2019 в 19:04
поделиться

Вы могли использовать функцию группировки запроса на своем запросе записей. Необходимо будет, очевидно, изменить поля запроса согласно данным и левому (), функция может быть другим синтаксисом в зависимости от механизма базы данных. Запрос ниже работ над MSSQL.

<cfquery datasource="#application.dsn#" name="qMembers">
SELECT firstname,lastname, left(lastname,1) as indexLetter
FROM member
ORDER BY indexLetter,lastName
</cfquery>


<p id="indexLetter">
<cfoutput query="qMembers" group="indexLetter">
    <a href="###qMembers.indexLetter#">#UCase(qMembers.indexLetter)#</a>
</cfoutput>
</p>




<cfif qMembers.recordCount>

    <table>

    <cfoutput query="qMembers" group="indexLetter">
        <tr>
            <th colspan="99" style="background-color:##324E7C;">
                <a name="#qMembers.indexLetter#" style="float:left;">#UCase(qMembers.indexLetter)#</a> 
                <a href="##indexLetter" style="color:##fff;float:right;">index</a>
            </th>
        </tr>

        <cfoutput>
        <tr>
            <td><strong>#qMembers.lastName#</strong> #qMembers.firstName#</td>
        </tr>
        </cfoutput>
    </cfoutput>

    </table>

<cfelse>
    <p>No Members were found</p>
</cfif>
3
ответ дан 5 December 2019 в 19:04
поделиться

Я заставил бы набор результатов SQL возвращать список во-первых, можно легко просто взять первую букву необходимого объекта и количество. Самый быстрый путь состоял бы в том, чтобы сделать соединение на таблице 26 символов (меньше обработки строк тот путь).

В использовании CF значение количества, чтобы гарантировать, что, если нет никакого результата Вы ни один единственный дисплей буква (как стандартный текст) или не отображайте его вообще.

Сколько строк - Вы собирающийся продолжать работать, поскольку могут быть лучшие способы сделать это. Например, хранение первой буквы Вашего необходимого поля ссылки в отдельном столбце на вставке уменьшило бы издержки при выборе.

1
ответ дан 5 December 2019 в 19:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: